home *** CD-ROM | disk | FTP | other *** search
/ AmigActive 10 / AACD 10.iso / AACD / Games / MAME / src / vidhrdw / aliens.c < prev    next >
C/C++ Source or Header  |  2000-03-26  |  3KB  |  112 lines

  1. #include "driver.h"
  2. #include "vidhrdw/konamiic.h"
  3.  
  4.  
  5. static int layer_colorbase[3],sprite_colorbase;
  6.  
  7. /***************************************************************************
  8.  
  9.   Callbacks for the K052109
  10.  
  11. ***************************************************************************/
  12.  
  13. static void tile_callback(int layer,int bank,int *code,int *color)
  14. {
  15.     *code |= ((*color & 0x3f) << 8) | (bank << 14);
  16.     *color = layer_colorbase[layer] + ((*color & 0xc0) >> 6);
  17. }
  18.  
  19.  
  20. /***************************************************************************
  21.  
  22.   Callbacks for the K051960
  23.  
  24. ***************************************************************************/
  25.  
  26. static void sprite_callback(int *code,int *color,int *priority_mask)
  27. {
  28.     /* The PROM allows for mixed priorities, where sprites would have */
  29.     /* priority over text but not on one or both of the other two planes. */
  30.     switch (*color & 0x70)
  31.     {
  32.         case 0x10: *priority_mask = 0x00; break;            /* over ABF */
  33.         case 0x00: *priority_mask = 0xf0          ; break;    /* over AB, not F */
  34.         case 0x40: *priority_mask = 0xf0|0xcc     ; break;    /* over A, not BF */
  35.         case 0x20:
  36.         case 0x60: *priority_mask = 0xf0|0xcc|0xaa; break;    /* over -, not ABF */
  37.         case 0x50: *priority_mask =      0xcc     ; break;    /* over AF, not B */
  38.         case 0x30:
  39.         case 0x70: *priority_mask =      0xcc|0xaa; break;    /* over F, not AB */
  40.     }
  41.     *code |= (*color & 0x80) << 6;
  42.     *color = sprite_colorbase + (*color & 0x0f);
  43. }
  44.  
  45.  
  46.  
  47. /***************************************************************************
  48.  
  49.     Start the video hardware emulation.
  50.  
  51. ***************************************************************************/
  52.  
  53. int aliens_vh_start( void )
  54. {
  55.     paletteram = malloc(0x400);
  56.     if (!paletteram) return 1;
  57.  
  58.     layer_colorbase[0] = 0;
  59.     layer_colorbase[1] = 4;
  60.     layer_colorbase[2] = 8;
  61.     sprite_colorbase = 16;
  62.     if (K052109_vh_start(REGION_GFX1,NORMAL_PLANE_ORDER,tile_callback))
  63.     {
  64.         free(paletteram);
  65.         return 1;
  66.     }
  67.     if (K051960_vh_start(REGION_GFX2,NORMAL_PLANE_ORDER,sprite_callback))
  68.     {
  69.         free(paletteram);
  70.         K052109_vh_stop();
  71.         return 1;
  72.     }
  73.  
  74.     return 0;
  75. }
  76.  
  77. void aliens_vh_stop( void )
  78. {
  79.     free(paletteram);
  80.     K052109_vh_stop();
  81.     K051960_vh_stop();
  82. }
  83.  
  84.  
  85.  
  86. /***************************************************************************
  87.  
  88.   Display refresh
  89.  
  90. ***************************************************************************/
  91.  
  92. void aliens_vh_screenrefresh(struct osd_bitmap *bitmap,int full_refresh)
  93. {
  94.     K052109_tilemap_update();
  95.  
  96.     palette_init_used_colors();
  97.     K051960_mark_sprites_colors();
  98.     palette_used_colors[layer_colorbase[1] * 16] |= PALETTE_COLOR_VISIBLE;
  99.     if (palette_recalc())
  100.         tilemap_mark_all_pixels_dirty(ALL_TILEMAPS);
  101.  
  102.     tilemap_render(ALL_TILEMAPS);
  103.  
  104.     fillbitmap(priority_bitmap,0,NULL);
  105.     fillbitmap(bitmap,Machine->pens[layer_colorbase[1] * 16],&Machine->drv->visible_area);
  106.     K052109_tilemap_draw(bitmap,1,1<<16);
  107.     K052109_tilemap_draw(bitmap,2,2<<16);
  108.     K052109_tilemap_draw(bitmap,0,4<<16);
  109.  
  110.     K051960_sprites_draw(bitmap,-1,-1);
  111. }
  112.